package tp.igl.Controler;

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import tp.igl.View.MasqueField;
import tp.igl.View.SegmentField;

/**
 * <b>MasqueControler est une class utilisé pour controler les champs de type 
 * MasqueField.<b>
 * <p>
 * Cette class impliment l'interface EventHandler<ActionEvent> et définie la methode 
 * handle. Elle assure l'adresse lu est un un masque d'adresse valide.
 * </p>
 * @see Masque
 * @see #handle
 * @see MasqueField
 * @author Redouane
 */
public class MasqueControler implements EventHandler<ActionEvent>{

    /**
     * Le MasqueField a controlé.
     */
    private MasqueField masque;
    
    /**
     *Constructeur MasqueField
     * <p>A la construction de l'objet MasqueControler,on doit fournir le MasqueField qu' 
     * il sera controlé par ce objet .</p>
     * @param masque le MasqueField a controlé.
     * @see MasqueField
     */
    public MasqueControler(MasqueField masque) {
        this.masque=masque;
    }

   /**
     * Elle est executée a chaque fois q'une evenement de type ActionEvent ce produit.
     * @param t un objet de type ActionEvent qui contient les informations sur la
     * source de l'evenement.
     */
    @Override
    public void handle(ActionEvent t) {
        SegmentField seg=(SegmentField)(t.getTarget());
        if(seg.getText().length()<=3){
            if(seg.getText().length()==0)
                seg.setText("0");
            Integer val=Integer.parseInt(seg.getText());
            Integer valPreced=(seg.getSegment()).getValeur();
            (seg.getSegment()).setValeur(val);  
            String str=masque.toString(2);
            if(str.matches(".*01.*")){
                    // remplire le champs avec l'ancienne valeur
                (seg.getSegment()).setValeur(valPreced);
                seg.setText(new Integer(seg.getSegment().getValeur()).toString());
                
            }
            else
            if(val<256 && val>=0){
                (seg.getSegment()).setValeur(val); 
                masque.fire();
            }
            else 
                seg.setText(valPreced.toString()); 
        }
        else
                    // remplire le champs avec l'ancienne valeur
            seg.setText(new Integer(seg.getSegment().getValeur()).toString());
        
    }
    
}
